import os
import zipfile
from datetime import datetime


def zip_directories():
    """打包当前目录下的所有目录，每个目录单独打包，文件名为目录名"""
    current_dir = os.getcwd()
    items = os.listdir(current_dir)

    for item in items:
        item_path = os.path.join(current_dir, item)
        # 只处理目录，忽略文件
        if os.path.isdir(item_path):
            zip_filename = f"{item}.zip"
            print(f"正在打包目录: {item} → {zip_filename}")

            try:
                with zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED) as zipf:
                    for root, dirs, files in os.walk(item_path):
                        for file in files:
                            file_path = os.path.join(root, file)
                            # 计算相对路径，保持目录结构
                            arcname = os.path.relpath(file_path, current_dir)
                            zipf.write(file_path, arcname)
                print(f"✓ 目录 {item} 打包完成")
            except Exception as e:
                print(f"✗ 目录 {item} 打包失败: {e}")


def zip_files():
    """打包当前目录下的所有文件到base.zip"""
    current_dir = os.getcwd()
    zip_filename = "base.zip"

    print(f"正在打包文件到: {zip_filename}")

    try:
        with zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED) as zipf:
            items = os.listdir(current_dir)
            files_zipped = 0

            for item in items:
                item_path = os.path.join(current_dir, item)
                # 只处理文件，忽略目录
                if os.path.isfile(item_path) and not item.endswith('.zip'):
                    zipf.write(item_path, item)
                    files_zipped += 1
                    print(f"  已添加文件: {item}")

        print(f"✓ 文件打包完成，共打包 {files_zipped} 个文件到 {zip_filename}")
    except Exception as e:
        print(f"✗ 文件打包失败: {e}")


def main():
    """主函数：依次执行目录打包和文件打包"""
    print("=" * 50)
    print("开始打包当前目录内容")
    print(f"工作目录: {os.getcwd()}")
    print("=" * 50)

    # 第一步：打包所有目录
    print("\n步骤1: 打包目录")
    print("-" * 30)
    zip_directories()

    # 第二步：打包所有文件
    print("\n步骤2: 打包文件")
    print("-" * 30)
    # zip_files()

    print("\n" + "=" * 50)
    print("所有打包操作已完成！")
    print("=" * 50)


if __name__ == "__main__":
    main()